package action;

import com.opensymphony.xwork2.ActionSupport;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import model.Aluno;
import model.Avaliacao;
import model.AvaliacaoId;
import model.Curso;
import model.Turma;

public class MatricularAction extends ActionSupport {

    private String operacao;
    private Avaliacao avaliacao;
    private List<Avaliacao> avaliacoes;
    private List<Curso> cursos;
    private List<Turma> turmas;
    private List<Turma> turmasList;
    private Aluno aluno;
    private int matricula;
    private String turmaSerial;

    public String getTurmaSerial() {
        return turmaSerial;
    }

    public void setTurmaSerial(String turmaSerial) {
        this.turmaSerial = turmaSerial;
    }

    public int getMatricula() {
        return matricula;
    }

    public void setMatricula(int matricula) {
        this.matricula = matricula;
    }

    public List<Turma> getTurmasList() {
        return turmasList;
    }

    public void setTurmasList(List<Turma> turmasList) {
        this.turmasList = turmasList;
    }

    public String getOperacao() {
        return operacao;
    }

    public void setOperacao(String operacao) {
        this.operacao = operacao;
    }

    public Avaliacao getAvaliacao() {
        return avaliacao;
    }

    public void setAvaliacao(Avaliacao avaliacao) {
        this.avaliacao = avaliacao;
    }

    public List<Avaliacao> getAvaliacoes() {
        return avaliacoes;
    }

    public void setAvaliacoes(List<Avaliacao> avaliacoes) {
        this.avaliacoes = avaliacoes;
    }

    public List<Curso> getCursos() {
        return cursos;
    }

    public void setCursos(List<Curso> cursos) {
        this.cursos = cursos;
    }

    public List<Turma> getTurmas() {
        return turmas;
    }

    public void setTurmas(List<Turma> turmas) {
        this.turmas = turmas;
    }

    public Aluno getAluno() {
        return aluno;
    }

    public void setAluno(Aluno aluno) {
        this.aluno = aluno;
    }

    public String efetuar() throws ClassNotFoundException, SQLException {
        aluno = Aluno.obterAluno(matricula);
        turmas = Turma.obterTurmas();
        avaliacoes = Avaliacao.obterAvaliacoesPorAluno(matricula);

        return "manter";
    }

    public String confirmar() throws SQLException, ClassNotFoundException {

        List<Avaliacao> avaliacoesAnt = Avaliacao.obterAvaliacoesPorAluno(aluno.getMatricula());

        for (Avaliacao a : avaliacoesAnt) {
            a.excluir();
        }
        Set<Turma> turmasSelecionadas = new HashSet<Turma>();
        String listTurmas = turmaSerial;
        List<String> codigosTurmas = Arrays.asList(listTurmas.split(","));
        for (String e : codigosTurmas) {
            if (!e.equals("")) {
                Turma turma = new Turma();
                turma.setCodTurma(Integer.parseInt(e));
                turmasSelecionadas.add(turma);
            }
        }

        for (Turma t : turmasSelecionadas) {
            AvaliacaoId avaliacaoId = new AvaliacaoId(aluno.getMatricula(), t.getCodTurma());
            Avaliacao avaliacao = new Avaliacao(avaliacaoId, aluno, t);
            avaliacao.gravar();
        }

        return "voltar";
    }

}
